package com.haixiaoke.saas.user.mapper;

import com.haixiaoke.saas.user.domain.UserBusiness;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * B端用户表Mapper接口
 *
 * @author panda
 * @date 2023-11-14
 */
public interface UserBusinessMapper {
    /**
     * 查询B端用户表
     *
     * @param userId B端用户表主键
     * @return B端用户表
     */
    UserBusiness selectUserBusinessByUserId(@Param("userId") Long userId, @Param("tenantId") String tenantId);

    /**
     * 查询B端用户表列表
     *
     * @param userBusiness B端用户表
     * @return B端用户表集合
     */
    List<UserBusiness> selectUserBusinessList(UserBusiness userBusiness);

    /**
     * 新增B端用户表
     *
     * @param userBusiness B端用户表
     * @return 结果
     */
    int insertUserBusiness(UserBusiness userBusiness);

    /**
     * 修改B端用户表
     *
     * @param userBusiness B端用户表
     * @return 结果
     */
    int updateUserBusiness(UserBusiness userBusiness);

    /**
     * 删除B端用户表
     *
     * @param userId B端用户表主键
     * @return 结果
     */
    int deleteUserBusinessByUserId(Long userId);

    /**
     * 批量删除B端用户表
     *
     * @param userIds 需要删除的数据主键集合
     * @return 结果
     */
    int deleteUserBusinessByUserIds(Long[] userIds);

    UserBusiness selectUserBusinessByUserName(String username);

    /**
     * 校验用户名称是否唯一
     *
     * @param userName 用户名称
     * @return 结果
     */
    UserBusiness checkUserNameUnique(@Param("userName") String userName, @Param("tenantId") String tenantId);

    /**
     * 校验手机号码是否唯一
     *
     * @param phonenumber 用户电话
     * @param tenantId
     * @return 结果
     */
    UserBusiness checkPhoneUniqueAndTenantId(@Param("phonenumber") String phonenumber, @Param("tenantId") String tenantId);
    UserBusiness checkPhoneUnique(String phonenumber);

    /**
     * 校验email是否唯一
     *
     * @param userEmail 用户邮箱
     * @return 结果
     */
    UserBusiness checkEmailUnique(String userEmail);

    List<UserBusiness> selectUserBusinessListAndDept(UserBusiness userBusiness);

    /**
     * 查询该租户下是否有其它用户
     *
     * @param tenantId
     * @return
     */
    int checkUserByTenantId(String tenantId);

    /**
     * 根据条件分页查询已配用户角色列表
     *
     * @param user 用户信息
     * @return 用户信息集合信息
     */
    List<UserBusiness> selectAllocatedList(UserBusiness user);

    /**
     * 根据条件分页查询未分配用户角色列表
     *
     * @param user 用户信息
     * @return 用户信息集合信息
     */
    List<UserBusiness> selectUnallocatedList(UserBusiness user);

    List<UserBusiness> selectUserBusListByDep(UserBusiness user);

    List<UserBusiness> selectUserBusListByDepUser(UserBusiness user);

    /**
     * 根据号码查询用户
     *
     * @param phonenumber
     * @return
     */
    UserBusiness selectUserBusinessByphonenumber(@Param("phonenumber") String phonenumber);

    /**
     * 根据号码查询用户
     *
     * @param phonenumber 手机号码
     * @return
     */
    UserBusiness selectUserByPhonenumber(String phonenumber);

    boolean updateUserAvatar(@Param("userId") Long userId, @Param("avatar") String avatar);

    UserBusiness selectUserManage(String tenantId);

    int countUserNumByTenantId(String tenantId);
}
